// 首页 index.js
const app = getApp();
import Toast from "@vant/weapp/toast/toast"; //轻提示
import Message from "tdesign-miniprogram/message/index"; //消息通知
import Dialog from "@vant/weapp/dialog/dialog"; //对话弹窗
const {
  hideTabBar,
  showTabBar
} = require("../../utils/tabbar.js");
import {
  getPackageList,
  getUserInfo,
  getOrderList,
  getPhoneNumber,
  order,
} from "../../api/index";

Page({
  data: {
    showBindPhone: false, // 手机验证弹窗
    showOrder: false, // 业务办理下单弹窗
    mobile: "", // 手机号码
    itemdetail: {}, // 下单弹窗信息
    orderCount: "", //订单数
    marquee: {
      speed: 50,
      loop: -1,
      delay: 0,
    },
    swiperImages: [
      app.globalData.imgUrl + "miniprogram/images/index/swiper_1.jpg",
      app.globalData.imgUrl + "miniprogram/images/index/swiper_2.jpg",
      app.globalData.imgUrl + "miniprogram/images/index/swiper_3.jpg",
    ], //轮播图
    products: [], // 商品列表
    userInfo: {}, // 用户信息
    hasUserInfo: false, // 是否获取用户信息
  },

  // 生命周期函数--页面加载
  onLoad() {
    if (app.globalData.openid) {
      // openid 已经获取，直接请求首页数据
      this.fetchIndexData();
    } else {
      // openid 未获取，注册回调
      app.openidReadyCallback = () => {
        this.fetchIndexData();
      };
    }
    Dialog.alert({
      title: "温馨提示",
      message: "公安部提示:根据《刑法》第225条规定，个人擅自买卖实名电话卡属违法犯罪行为，请勿将已登记您本人身份证信息的号卡转卖、租借他人或用于诈骗等不合法行为，如号卡丢失，请及时挂失、注销，保护个人信息安全。（涉嫌诈骗等违法犯罪行为等号码，实名登记机主需承担法律责任）",
      confirmButtonText: "我已知晓并承诺本人使用",
    }).then(() => {
      this.checkUserInfo();
    });
  },
  // 生命周期函数--监听页面显示
  onShow() {
    if (typeof this.getTabBar === "function" && this.getTabBar()) {
      const route = "/" + this.route;
      const tabList = this.getTabBar().data.list;
      const current = tabList.find((i) => i.pagePath === route);
      if (current) {
        this.getTabBar().setData({
          value: current.value,
        });
      }
    }
    console.log(app.globalData);
    this.getList();
  },
  // 校验用户信息
  checkUserInfo() {
    // 重新获取用户信息
    let userInfo = app.globalData.userInfo;
    if (!userInfo) {
      getUserInfo().then((res) => {
        userInfo = res.data;
        if (userInfo) {
          app.globalData.userInfo = userInfo;
          app.globalData.mobile = userInfo.mobile;
          this.setData({
            userInfo,
            hasUserInfo: true,
          });
          // 获取到用户信息后再检查手机绑定
          this.checkMobileBinded();
        } else {
          Toast('获取用户信息失败')
          // 跳转到登录页或弹窗提示
          // wx.reLaunch({
          //   url: "/pages/login/index",
          // });
        }
      });
    } else { //以获取用户信息
      console
      this.setData({
        userInfo,
        hasUserInfo: true,
        mobile: userInfo.mobile
      });
      this.checkMobileBinded();
    }
  },
  // 初始化数据
  getList() {
    // 获取商品列表
    getPackageList()
      .then((res) => {
        this.setData({
          products: res.data || [],
        });
      })
      .catch(() => {
        Toast("商品加载失败");
      });
    // 获取用户待支付订单数
    getOrderList().then((res) => {
      this.setData({
        orderCount: res.data.length,
      });
      app.globalData.orderCount = res.data.length;
    });
    this.setData({
      mobile: app.globalData.mobile,
    });
  },

  // 校验是否已绑定手机
  checkMobileBinded() {
    if (app.globalData.mobile) {
      this.setData({
        mobile: app.globalData.mobile,
      });
      // showTabBar(this);
    } else {
      // hideTabBar(this);
      Toast("未登录!");
      // this.setData({
      //   showBindPhone: true,
      // });
    }
  },

  // 手机号快速验证组件授权登录
  bindPhoneNumber(e) {
    if (!e.detail.code) {
      Toast("登录失败");
      return;
    }
    getPhoneNumber(e.detail.code).then((res) => {
      if (res && res.code === 200) {
        //绑定后刷新用户数据
        getUserInfo().then((res) => {
          this.setData({
            userInfo: res.data,
            mobile: res.data.mobile,
            showBindPhone: false,
          });
          app.globalData.userInfo = res.data //更新全局数据
          app.globalData.mobile = res.data.mobile || '';
        })
        this.checkUserInfo(); //绑定成功后重新校验用户信息
        Toast("登录成功");
        wx.showTabBar({
          animation: true //是否需要动画效果 
        })
        // showTabBar(this);
      } else {
        Toast("取消登录");
      }
    });
  },

  // 下拉刷新
  onPullDownRefresh() {
    setTimeout(() => {
      //刷新商品数据
      this.getList();
      wx.stopPullDownRefresh();
    }, 100);
    Toast("刷新成功");
  },

  // 关闭所有弹出层
  onClose() {
    this.setData({
      showBindPhone: false,
      showOrder: false,
    });
    // showTabBar(this);
    wx.showTabBar({
      animation: true //是否需要动画效果 
    })
  },

  // 点击商品，弹出下单弹窗
  handleClick(e) {
    const index = e.currentTarget.dataset.id;
    const item = this.data.products[index];
    if (!item) return;
    // hideTabBar(this);
    // 跳转到商品详情页，并携带商品id参数
    wx.navigateTo({
      url: `/pages/productDetails/index?id=${item.id}`,
    });
    // this.setData({
    //   showOrder: true,
    //   itemdetail: item,
    // });
  },
  // 下单按钮，立即办理
  handleOrder() {
    if (!this.data.userInfo.mobile) {
      wx.showToast({
        title: "未绑定手机,即将跳转!",
        icon: "error",
      });
      return;
    }
    // 办理套餐信息
    console.log(this.data.itemdetail);
    // 下单并发送请求至后端，并用变量接收返回的res.data
    order(this.data.itemdetail.id)
      .then((res) => {
        const orderId = res.data; // 这里接收后端返回的data
        console.log("当前订单：" + orderId);
        this.onClose();
        this.getList();
        this.showSuccessMessage(orderId);
      })
      .catch(() => {
        this.showErrorMessage();
      });
  },
  //下单成功消息通知
  showSuccessMessage(orderId) {
    Message.success({
      context: this,
      link: {
        content: "点击前往支付",
        navigatorProps: {
          url: "/pages/orderDetails/index?orderId=" + orderId + "&state=0",
        },
      },
      visible: true, //隐藏时销毁组件
      duration: 5000,
      content: "下单成功,",
    });
  },
  //下单失败消息通知
  showErrorMessage() {
    Message.error({
      context: this,
      visible: true, //隐藏时销毁组件
      duration: 5000,
      content: "下单失败,",
    });
  },
  // 一证通查
  handleYztc() {
    wx.navigateToMiniProgram({
      appId: "wx9ccaf5ef968ef0cd",
    });
  },

  // 开发中...
  tmp1() {
    wx.navigateTo({
      url: '/pages/business/index'
    })
  },

  tmp2() {
    wx.navigateTo({
      url: '/pages/other/index'
    })
  },

  //客服售后
  makePhoneCall() {
    wx.makePhoneCall({
      phoneNumber: "19954435380",
    });
  },

  //前往登录
  toLogin() {
    hideTabBar(this);
    this.setData({
      showBindPhone: true,
    });
    wx.hideTabBar({
      animation: true //是否需要动画效果 
    })
  },

  fetchIndexData() {
    // 这里写你首页需要 openid 的数据请求逻辑
    this.getList();
  }
});